﻿using Microsoft.VisualStudio.TestTools.UnitTesting;

using System;
using System.Text;
using System.IO;

using YTS.Log;

using IOFileServer.ZMPhoneticEnglish;
using IOFileServer.ZMPhoneticEnglish.Implementation;

namespace IOFileServer.Test.ZMPhoneticEnglish
{
    [TestClass]
    public class TestIWordHandle
    {
        private ILog log;

        [TestInitialize]
        public void Init()
        {
            FileInfo fileInfo = new FileInfo($"./logs/TestIWordHandle/{DateTime.Now:yyyy_MM_dd}.log");
            log = new FilePrintLog(fileInfo, Encoding.UTF8);
        }

        [TestCleanup]
        public void Clean()
        {
        }

        [TestMethod]
        public void Test_WordHandle_Compliance()
        {
            IWordHandle handle = new WordHandle();

            Assert.IsFalse(handle.Compliance(null, out _));
            Assert.IsFalse(handle.Compliance(string.Empty, out _));
            Assert.IsFalse(handle.Compliance("", out _));
            Assert.IsFalse(handle.Compliance(" ", out _));
            Assert.IsFalse(handle.Compliance("  ", out _));
            Assert.IsFalse(handle.Compliance(" w$ord ", out _));
            Assert.IsFalse(handle.Compliance(" w$ord ", out _));
        }

        [TestMethod]
        public void Test_WordHandle_Standard()
        {
            IWordHandle handle = new WordHandle();

            void _check_not_english_char(string text_word)
            {
                string r_word = handle.Standard(text_word);
                Assert.AreEqual("word", r_word);
            }
            _check_not_english_char("WORD");
            _check_not_english_char("1word");
            _check_not_english_char("111word");
            _check_not_english_char("1w1ord");
            _check_not_english_char("1w1o1rd");
            _check_not_english_char("1w1o11rd");
            _check_not_english_char("1w1o1r1d");
            _check_not_english_char("1w1o111r111d");
            _check_not_english_char("1w1o1r1d1");
            _check_not_english_char("word111");
            _check_not_english_char("1Word");
            _check_not_english_char("111wORd");
            _check_not_english_char("1W1ord");
            _check_not_english_char("1w1o1rD");
            _check_not_english_char("1W1O11rd");
            _check_not_english_char("1w1o1r1D");
            _check_not_english_char("1w1O111R111d");
            _check_not_english_char("1w1o1r1d1");
            _check_not_english_char("WOrD111");
            _check_not_english_char("%)word");
            _check_not_english_char("%)%)%)word");
            _check_not_english_char("%)w%)ord");
            _check_not_english_char("%)w%)o%)rd");
            _check_not_english_char("%)w%)o%)%)rd");
            _check_not_english_char("%)w%)o%)r%)d");
            _check_not_english_char("%)w%)o%)%)%)r%)%)%)d");
            _check_not_english_char("%)w%)o%)r%)d%)");
            _check_not_english_char("word%)%)%)");
            _check_not_english_char("%)Word");
            _check_not_english_char("%)%)%)wORd");
            _check_not_english_char("%)W%)ord");
            _check_not_english_char("%)w%)o%)rD");
            _check_not_english_char("%)W%)O%)%)rd");
            _check_not_english_char("%)w%)o%)r%)D");
            _check_not_english_char("%)w%)O%)%)%)R%)%)%)d");
            _check_not_english_char("%)w%)o%)r%)d%)");
            _check_not_english_char("WOrD%)%)%)");
            _check_not_english_char("翁word");
            _check_not_english_char("翁翁翁word");
            _check_not_english_char("翁w翁ord");
            _check_not_english_char("翁w翁o翁rd");
            _check_not_english_char("翁w翁o翁翁rd");
            _check_not_english_char("翁w翁o翁r翁d");
            _check_not_english_char("翁w翁o翁翁翁r翁翁翁d");
            _check_not_english_char("翁w翁o翁r翁d翁");
            _check_not_english_char("word翁翁翁");
            _check_not_english_char("翁Word");
            _check_not_english_char("翁翁翁wORd");
            _check_not_english_char("翁W翁ord");
            _check_not_english_char("翁w翁o翁rD");
            _check_not_english_char("翁W翁O翁翁rd");
            _check_not_english_char("翁w翁o翁r翁D");
            _check_not_english_char("翁w翁O翁翁翁R翁翁翁d");
            _check_not_english_char("翁w翁o翁r翁d翁");
            _check_not_english_char("WOrD翁翁翁");
            _check_not_english_char("word翁翁翁");
            _check_not_english_char("翁Word");
            _check_not_english_char(" 翁翁翁wORd");
            _check_not_english_char("翁W翁ord");
            _check_not_english_char("翁w翁o 翁rD");
            _check_not_english_char("翁W翁O翁翁rd");
            _check_not_english_char("翁w 翁 o翁r翁D");
            _check_not_english_char("翁w翁O翁 翁翁 R翁翁翁d");
            _check_not_english_char("翁w 翁o翁r翁d翁");
            _check_not_english_char(" WOrD翁翁 翁 ");
            _check_not_english_char("WOrD翁翁 翁 ");
        }
    }
}
